////import java.util.*;
////
////
////public class Main {
////    public static void main(String[] args) {
////        Scanner in = new Scanner(System.in);
////        int count = 0;
////        while (in.hasNextInt()) {
////            int n = in.nextInt();
////            while (n != 0) {
////                if(n%2==1)
////                {
////                    count++;//12
////                }
////                n=n/2;//2//1
////            }
////            System.out.println(count);
////        }
////
////    }
////    public int findMinimum(int n, int[] left, int[] right) {
////        if (n == 1)return 2;
////        int sunL=0,sumR=0;
////        int minL=Integer.MAX_VALUE,minR=Integer.MIN_VALUE;
////        int sum=0;
////
////        for(int i=0;i<n;i++){
////            if(left[i]*right[i]==0){
////                sum=sum+left[i]+right[i];
////            }else{
////                sunL+=left[i];
////                sumR+=right[i];
////                if(minL>left[i]){
////                    minL=left[i];
////                }
////               if (minR > right[i])minR=right[i];
////            }
////        }
////        return Math.min(sumR-minR+1,sunL-minL+1)+1;
////    }
////}
//
//import java.util.Scanner;
//
//public class Main {
//
//    public static boolean func(int n)
//    {
//        int sum=0;
//        for(int i=1;i<n;i++)
//        {
//            for(int j=1;j<=n;j++)
//            {
//                if(i*j==n)
//                {
//                    sum+=i;
//                }
//            }
//        }
//        if(sum==n)
//        {
//            return true;
//        }
//        return false;
//    }
//    public static void main(String[] args) {
//        Scanner in = new Scanner(System.in);
//        int n=in.nextInt();
//        int count=0;
//        for(int i=1;i<=n;i++)
//        {
//            if(func(i))
//            {
//                count++;
//            }
//        }
//        System.out.println(count);
//    }
//}


//import java.util.Scanner;
//
//public class Main {
//    public static void main(String[] args) {
//        Scanner in = new Scanner(System.in);
//        String str=in.nextLine();
//        String s=str.toLowerCase();
//        String str1=in.nextLine();
//        String ss=str1.toLowerCase();
//        char[] ch=s.toCharArray();
//        char[] ch1=ss.toCharArray();
//        int count=0;
//        for(int i=0;i<ch.length;i++)
//        {
//            if(ch[i]==ch1[0])
//            {
//                count++;
//            }
//        }
//        System.out.println(count);
//    }
//}


//


import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        //给二维数组开空间(先写10行）
        int n=sc.nextInt();
        int [][] arr = new int[n][];
        for(int i = 0; i < arr.length; i++){
            //给二维数组中的一维数组开空间
            arr[i] = new int[i + 1];
            for(int j = 0; j < arr[i].length; j++){
                //判断是否是第i行的第一列或最后一列（杨辉三角中每一行的第一列和最后一列为1）
                if(j == 0  ||  j == i){
                    arr[i][j] = 1;
                }else
                    arr[i][j] = arr[i-1][j] + arr[i-1][j-1];

            }
        }
        //输出杨辉三角
        for(int i = 0; i < arr.length; i++){
            for(int m= 0; m < arr[i].length; m++)
                System.out.print(arr[i][m] + "\t");
            System.out.println();
        }

//        for(int i=0;i<n;i++)
//        {
//            if(arr[n-1][i]%2==0)
//            {
//                System.out.println(i);
//            }
//        }
    }
}